package main

import (
	"github.com/lxn/walk"
)

// ImageReadyToShow 当生成image完成时，通过该通道通知另一个协程打印图片
var ImageReadyToShow = make(chan struct{})
//ImageFinishShowing 因为打印图片的协程需要打开文件，所以在打印完成前不允许写，通过ImageFinishShowing通知
var ImageFinishShowing = make(chan struct{})

var OnlyOnce=1

// DifficultyAdjust 难度调节函数同时也是开始函数
func DifficultyAdjust(ch chan<- int,level int) func()(){
	return func() {
		if OnlyOnce>0 {
			OnlyOnce-=1
			//该协程只执行一次，该协程为实时打印图片的协程
			go func() {
				for {
					select {
					case <-ImageReadyToShow:
						ShowImage("./pic/picToShow.jpeg")()
						ImageFinishShowing<- struct{}{}
					}
				}
			}()
		}
		ch<-level
	}
}

func KeyScan(key walk.Key) {
	keyAsInt:=int(key)
	inTE.SetText("")
	if !(keyAsInt==65||keyAsInt==68||keyAsInt==83||keyAsInt==87) {
		outTE.SetText("无效操作")
	} else {
		select {
		case ActionChannel<-keyAsInt+32:
		default:
		}
		outTE.SetText("你键入了"+string(key))
	}
}

func ShowImage(picturePath string) func(){
	return func() {
		imageToShow,_:=walk.NewImageFromFileForDPI(picturePath,50)
		IV.SetImage(imageToShow)
		IV.SetMargin(5)
		IV.SetMode(walk.ImageViewModeZoom)
	}
}

func BottomButtonPush() func(){
	return func() {
		outTE.SetTextColor(walk.Color(150))
		outTE.SetText("鼠标点击难度1~4选择难度并开始游戏，点击操作框，使用wasd控制上下左右，当头触碰到墙壁或者身体时游戏结束，程序会直接退出\r\n游戏过程中也可以改变难度，但要再次点击输入框才能继续操作！！\r\n（注：使用的插图来源网络）")
	}
}